/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Clinica;
import br.com.sigodonto.model.entity.Paciente;
import br.com.sigodonto.model.util.DateUtil;
import br.com.sigodonto.model.util.RelatorioUtil;
import br.com.sigodonto.model.util.SessionUtil;
import br.com.sigodonto.view.datamodel.PacienteDataModel;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class EmitirDeclaracaoMB implements Serializable {

    /**
     * Creates a new instance of EmitirDeclaracaoMB
     */
    private Paciente pacienteSelecionado;
    private PacienteDataModel pacienteDataModel;
    private DaoGenerico daoGenerico;
    private Clinica clinica;
    private Date data;
    private String horas;
    private String estadoCivil;

    public EmitirDeclaracaoMB() {
        this.daoGenerico = new DaoGenerico();
        List<Paciente> pacientes = this.daoGenerico.listarTodos(Paciente.class);
        this.pacienteDataModel = new PacienteDataModel(pacientes);
        FacesContext context = FacesContext.getCurrentInstance();
        this.clinica = SessionUtil.carregarClinica(context);
    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    public PacienteDataModel getPacienteDataModel() {
        return pacienteDataModel;
    }

    public void setPacienteDataModel(PacienteDataModel pacienteDataModel) {
        this.pacienteDataModel = pacienteDataModel;
    }

    public Clinica getClinica() {
        return clinica;
    }

    public void setClinica(Clinica clinica) {
        this.clinica = clinica;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public String getHoras() {
        return horas;
    }

    public void setHoras(String horas) {
        this.horas = horas;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public void emitirDeclaracao() {
        FacesMessage message = new FacesMessage();
        String msg = "DECLARAÇÃO EMITIDA COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        HashMap<String, Object> parameterMap = new HashMap<String, Object>();
        String nomepaciente = this.pacienteSelecionado.getNome() + " " + this.pacienteSelecionado.getSobrenome();
        String enderecoClinica = this.clinica.getEndereco().getLogradouro() + ", " + this.clinica.getEndereco().getNumero() + " - " + this.clinica.getEndereco().getBairro() + ", " + this.clinica.getEndereco().getCidade() + "-" + this.clinica.getEndereco().getUf();
        String logo = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/clinica/" + this.clinica.getLogo());
        String corpo = "Declaro, para os devidos fins, que o Sr(a). "+ nomepaciente +","
                + " brasileiro(a), "+ this.estadoCivil +", "+ this.pacienteSelecionado.getProfissao() +", "
                + "inscrito(a) no CPF sob o nº "+ this.pacienteSelecionado.getCpf() +", "
                + "esteve presente em consulta médica no dia "+ DateUtil.converteData(data) +", "
                + "durante aproximante "+ this.horas +".";

        parameterMap.put("TITULO", "DECLARAÇÃO");
        parameterMap.put("CORPO_ATESTADO", corpo);
        parameterMap.put("CLINICA_LOGO", logo);
        parameterMap.put("CLINICA_ENDERECO", enderecoClinica);
        parameterMap.put("CLINICA_EMAIL", this.clinica.getContato().getEmail());
        parameterMap.put("CLINICA_TELEFONE", this.clinica.getContato().getTelefone());
        parameterMap.put("CLINICA_CELULAR", this.clinica.getContato().getCelular());

        String relatorio = "declaracao.jasper";
        RelatorioUtil.gerarRelatorioSemColecao(relatorio, parameterMap);

        this.zerar();

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void onRowSelect(SelectEvent event) {
    }

    private void zerar() {
        data = null;
        horas = "";
        estadoCivil = "";
        this.pacienteSelecionado = new Paciente();
    }
}
